package com.test.example.controller.limit;

import com.xingluo.tools.limiter.anno.RateLimiter;
import com.xingluo.tools.limiter.enums.LimitStrategy;
import com.xingluo.tools.limiter.enums.LimitType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class LimitController {

    @GetMapping("/limit1")
    @RateLimiter
    public String limit1() {
        return "注解不配置，则使用配置文件的配置，配置文件也不配置，则使用令牌桶限流，每秒10个令牌，最多500个";
    }

    @GetMapping("/limit2")
    @RateLimiter(limitType = LimitType.FIXED, limit = 3, time = 10)
    public String limit2() {
        return "使用固定窗口，10秒内3次请求，下一个10秒才能再次请求3个";
    }

    @GetMapping("/limit3")
    @RateLimiter(limitType = LimitType.WINDOW, limit = 3, time = 10)
    public String limit3() {
        return "使用滑动窗口，10秒内的窗口请求不能超过3次，窗口滑动";
    }

    @GetMapping("/limit4")
    @RateLimiter(limitType = LimitType.WINDOW, limitStrategy = LimitStrategy.IP, limit = 3, time = 10)
    public String limit4() {
        return "使用滑动窗口，10秒内的窗口同一个IP请求不能超过3次，窗口滑动";
    }
}
